package com.xiangge.method;
/*
    有返回值无参数的方法：
           声明：
              位置： 在类中方法外
              格式：
                  public static 数据类型 方法名(){
                     方法体;
                     return 值;
                  }
               说明： 有返回值的方法必须写return,而且必须有返回值

           调用：
                打印调用 ： System.out.println(方法名());
                赋值调用： 数据类型 变量名 = 方法名();

           需求：调用方法获得常量3+ 4的和。
           需求：调用方法：将键盘录入的整数转成2进制字符串返回
           需求：调用方法：将数组：[1,2,3,4,5]反转之后返回
           需求：调用方法：将存入了10个随机整数的数组的元素求平均值返回

           注意事项：
               1. 方法调用时的数据类型必须符合方法的返回值类型, 支持自动类型转换
               2. 实际的返回值的类型必须符合方法声明的返回值类型, 支持自动类型转换
               3. 方法调用时的实际参数必须符合参数列表：
                        -- 参数的个数要匹配
                        -- 参数的类型要对应
 */


import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

public class MethodDemo5 {
    public static void main(String[] args) {
        // 调用方法
        String binString = decToBinString(); // "100011"
        System.out.println("binString = " + binString);

        int[] fanzhuan = getFanzhuan();
        System.out.println(Arrays.toString(fanzhuan));

        double avg = getAvg();
        System.out.println("avg = " + avg);

    }

    // 定义方法： 需求：调用方法：将键盘录入的整数转成2进制字符串返回   --- 有返回值无参数的方法
    // 1. 明确： 返回值类型： String    2. 形式参数： ()
    /**
     * @return 10进制整数转成2进制的字符串
     */
    public static String decToBinString(){
        // 方法体
        // 1. 键盘录入一个整数：n
        System.out.println("请输入一个正整数：");
        int num = new Scanner(System.in).nextInt();
        // 定义用于拼接的字符串
        String str = "";
        // 2. 使用死循环模拟除二取余过程
        while (true) {
            // 3. 获取每一轮循环得到的余数
            int bit = num % 2 ;
            // 从后往前拼接余数
            str = bit + str;
            // 4. 修改num的值
            num = num / 2;
            // 5. 判断num是否到0
            if(num == 0){
                break;
            }
        }
        // 6. 返回2进制字符串str
        return str;
    }

    private static double getAvg() {
        int[] arr = new int[10];
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            arr[i] = new Random().nextInt(10)+1;
            sum+=arr[i];
        }
        System.out.println(Arrays.toString(arr));
        System.out.println("sum = " + sum);
        double avg = (double)sum/arr.length;
        return avg;
    }


    public static int[] getFanzhuan() {

        int[] arr = {2,4,5,6,7};
        int[] newarr = new int[arr.length];

        for (int i = 0; i < arr.length; i++) {
            newarr[arr.length-1-i] = arr[i];
        }

        return newarr;
    }


}
